const env = require("../config/env.js");

/**
 * 统一请求工具函数
 * @param {Object} options - 请求配置项
 * @param {string} options.url - 接口地址（从api.js中获取）
 * @param {string} [options.method="GET"] - 请求方法
 * @param {Object} [options.data] - 请求参数
 * @param {Object} [options.header] - 自定义请求头
 * @returns {Promise} - 包含响应数据的Promise
 */
function request(options) {
  // 显示加载中提示
  wx.showLoading({ title: "加载中...", mask: true });

  return new Promise((resolve, reject) => {
    // 构造请求配置
    const requestConfig = {
      url: options.url,
      method: options.method || "GET",
      data: options.data || {},
      header: {
        ...env.header, // 合并默认请求头
        ...(options.header || {}) // 合并自定义请求头
      },
      timeout: env.timeout,
      // 成功回调
      success: (res) => {
        wx.hideLoading(); // 隐藏加载提示
        console.log(res)
        // 假设后端返回格式为 { code, data, msg }
        const { code, data, msg } = res.data;
        if (code === 200 || code===100) {
          resolve(data); // 业务成功，返回数据
        } else if (code === 401) {
          // 未登录或Token过期，跳转登录页
          // wx.removeStorageSync("token");
          wx.navigateTo({ url: "/pages/login/login" });
          reject(new Error("登录已过期，请重新登录"));
        } else {
          // 业务错误，提示并抛出异常
          wx.showToast({ title: msg || "请求失败", icon: "none" });
          reject(new Error(msg || `错误码：${code}`));
        }
      },
      // 失败回调（网络错误、超时等）
      fail: (err) => {
        wx.hideLoading();
        wx.showToast({ title: "网络异常，请重试", icon: "none" });
        reject(err);
      }
    };

    // 注入Token（如果存在）
    // const token = wx.getStorageSync("token");
    // if (token) {
    //   requestConfig.header["Authorization"] = `Bearer ${token}`;
    // }

    // 发起微信原生请求
    wx.request(requestConfig);
  });
}

// 简化GET/POST请求的快捷方法
request.get = (url, data, header) => {
  return request({ url, method: "GET", data, header });
};

request.post = (url, data, header) => {
  return request({ url, method: "POST", data, header });
};

module.exports = request;